/**
 * 资源类型枚举
 */
export enum ResourceType {
    /** 图片资源 */
    IMAGE = 'image',
    /** 音频资源 */
    AUDIO = 'audio',
    /** JSON资源 */
    JSON = 'json',
    /** 文本资源 */
    TEXT = 'text',
    /** 字体资源 */
    FONT = 'font'
}

/**
 * 资源状态枚举
 */
export enum ResourceState {
    PENDING = 'pending',    // 等待加载
    LOADING = 'loading',    // 加载中
    LOADED = 'loaded',      // 加载完成
    ERROR = 'error'         // 加载错误
}

/**
 * 资源加载选项
 */
export interface ResourceLoadOptions {
    /**
     * 资源类型
     */
    type: ResourceType;
    
    /**
     * 资源URL
     */
    url: string;
    
    /**
     * 资源名称（可选，默认使用URL的最后部分）
     */
    name?: string;
    
    /**
     * 是否缓存资源（默认true）
     */
    cache?: boolean;
    
    /**
     * 加载超时时间（毫秒）
     */
    timeout?: number;
    
    /**
     * 重试次数
     */
    retryCount?: number;
    
    /**
     * 重试延迟（毫秒）
     */
    retryDelay?: number;
    
    /**
     * 资源加载优先级（数字越大优先级越高）
     */
    priority?: number;
}

/**
 * 资源基类接口
 */
export interface Resource {
    /**
     * 资源名称
     */
    name: string;
    
    /**
     * 资源类型
     */
    type: ResourceType;
    
    /**
     * 资源URL
     */
    url: string;
    
    /**
     * 资源状态
     */
    state: ResourceState;
    
    /**
     * 资源数据
     */
    data: any;
    
    /**
     * 加载错误信息
     */
    error?: Error;
    
    /**
     * 加载进度（0-1）
     */
    progress: number;
    
    /**
     * 加载时间戳
     */
    loadTime: number;

    /**
     * 重试次数
     */
    retryCount?: number;
}

/**
 * 图片资源接口
 */
export interface ImageResource extends Resource {
    type: ResourceType.IMAGE;
    data: HTMLImageElement;
    width: number;
    height: number;
}

/**
 * 音频资源接口
 */
export interface AudioResource extends Resource {
    type: ResourceType.AUDIO;
    data: HTMLAudioElement;
    duration: number;
}

/**
 * JSON资源接口
 */
export interface JsonResource extends Resource {
    type: ResourceType.JSON;
    data: any;
}

/**
 * 文本资源接口
 */
export interface TextResource extends Resource {
    type: ResourceType.TEXT;
    data: string;
}

/**
 * 字体资源接口
 */
export interface FontResource extends Resource {
    type: ResourceType.FONT;
    data: FontFace;
}

/**
 * 资源管理器选项
 */
export interface ResourceManagerOptions {
    /**
     * 资源加载超时时间（毫秒）
     */
    timeout?: number;
    
    /**
     * 最大并发加载数
     */
    maxConcurrent?: number;
    
    /**
     * 是否启用缓存
     */
    enableCache?: boolean;
    
    /**
     * 缓存过期时间（毫秒）
     */
    cacheExpiration?: number;
    
    /**
     * 重试次数
     */
    retryCount?: number;
    
    /**
     * 重试延迟（毫秒）
     */
    retryDelay?: number;
    
    /**
     * 资源加载优先级队列大小
     */
    priorityQueueSize?: number;
    
    /**
     * 是否在加载失败时抛出错误
     */
    throwOnError?: boolean;
}

/**
 * 资源加载事件类型
 */
export enum ResourceEventType {
    LOAD_START = 'loadStart',
    LOAD_PROGRESS = 'loadProgress',
    LOAD_COMPLETE = 'loadComplete',
    LOAD_ERROR = 'loadError',
    CACHE_HIT = 'cacheHit',
    CACHE_MISS = 'cacheMiss'
}

/**
 * 资源加载事件数据
 */
export interface ResourceEventData {
    /**
     * 资源名称
     */
    name: string;
    
    /**
     * 资源类型
     */
    type: ResourceType;
    
    /**
     * 资源URL
     */
    url: string;
    
    /**
     * 加载进度（0-1）
     */
    progress?: number;
    
    /**
     * 错误信息
     */
    error?: Error;
    
    /**
     * 加载时间（毫秒）
     */
    loadTime?: number;
}

/**
 * 资源加载事件处理器
 */
export type ResourceEventHandler = (event: ResourceEventData) => void; 